function foo(){
  foo.a = function(){console.log(1)};  // 将 foo 函数对象的属性 a 重新定义为一个新的函数，打印 1
  this.a = function(){console.log(2)}; // 将 obj 对象的属性 a 定义为一个新的函数，打印 2
  a = function(){console.log(3)};      // 定义一个全局函数 a，打印 3
  var a = function(){console.log(4)};  // 局部变量声明，定义一个函数 a，打印 4（但此行没有效果，因为 var a 被 a = function()... 覆盖）
}

foo.prototype.a = function(){console.log(5)};  // 将 foo 的原型链上的属性 a 定义为一个新的函数，打印 5
foo.a = function(){console.log(6)};  // 将 foo 函数对象的属性 a 定义为一个新的函数，打印 6


foo.a();//6

// 当 new foo() 被调用时，foo 函数体内部的代码会被执行：
// 1. foo.a = function(){console.log(1)} 覆盖了 foo.a，现在 foo.a 打印 1。
// 2. this.a = function(){console.log(2)} 定义了 obj.a，现在 obj.a 打印 2。
// 3. a = function(){console.log(3)} 创建了一个全局函数 a，但这个函数在后续代码中没有被使用。
// 4. var a = function(){console.log(4)} 只是定义了一个局部变量 a，但没有任何实际作用，因为它与全局函数 a 无关。
var obj= new foo()
obj.a();//2 
foo.a(); // 1